package com.pxr.db;

import java.sql.*;

public class DBProvider {

    /**
     * 获取数据库链接
     *
     * @return 数据库链接
     */
    public Connection getConn() {
        //返回值
        Connection connection = null;
        //准备数据库连接的相关操作
        //数据库的驱动类的名字，包路径名
        String strDriverName4Mysql8 = "com.mysql.cj.jdbc.Driver";
        String strDriverName4Mysql5 = "com.mysql.jdbc.Driver";
        String strDriverName4Oracle = "oracle.jdbc.driver.OracleDriver";

        // 数据库服务器的连接串
        // 连接串中的 localhost 127.0.0.1 ip地址 服务器名 表示服务器的访问路径  3306 mysql数据库服务器监听的端口号
        String strURL4Mysql8 = "jdbc:mysql://localhost:3306/tjise202103?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong&allowPublicKeyRetrieval=true";
        String strURL4Mysql5 = "jdbc:mysql://localhost:3306/tjise202103?useUnicode=true&characterEncoding=utf8";
        String strURL4Oracle = "jdbc:oracle:thin:@localhost:1521:XE"; // orcl 表示Oracle数据库安装的实例名，默认是orcl，如果不是默认，则改成自己的

        // 登录数据库的用户名和密码
        String strUserName = "scott";
        String strUserPsw = "a123456";

        try {
            //        (1) 加载数据库驱动类；【使用反射】
            // 如果jvm中没有数据库驱动类Driver实例对象，会自动根据连接串类型进行加载数据库驱动类的实例.
            // Class.forName(strDriverName4Mysql8); // 这一行可以不用写，jvm会自动加载
            //        (2) 通过DriverManager类的静态方法获取数据库的连接对象Connection；
            connection = DriverManager.getConnection(strURL4Oracle,strUserName,strUserPsw);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 查询操作
     * @param strSql 查询语句
     * @return 查询结果集
     */
    public ResultSet query(String strSql) {
        ResultSet resultSet = null;
        try {
            //        (3) 通过数据库连接对象获取查询器 Statement ；
            Statement statement = getConn().createStatement();
            //        (5) 使用查询器执行SQL语句，如果是查询操作，则会返回一个ResultSet结果集；
            resultSet = statement.executeQuery(strSql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return resultSet;
    }
}
